package com.raos.example.image;

import dev.langchain4j.data.message.ImageContent;
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Base64;
import java.util.List;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 多模态输入 图片结合提示词聊天webAPI
 *
 * @author raos
 * @date 2023-03-28
 */
@Slf4j
@RestController
@RequestMapping("/api/image")
public class ImageAPI {

    @Resource(name = "qwenChatModel")
    ChatLanguageModel chatLanguageModel;

    @GetMapping("/high/chat")
    public String highChat(@RequestParam(value = "message") String message) throws IOException {
        log.info("message={}", message);
        File file = new File("D:\\Users\\HASEE\\ai-demo\\lang-chain4j-demo\\documents\\cat.png");
        byte[] bytes = Files.readAllBytes(file.toPath());

        UserMessage userMessage = UserMessage.from(TextContent.from(message),
            ImageContent.from(Base64.getEncoder().encodeToString(bytes), "image/png"));
        String text = chatLanguageModel.chat(List.of(userMessage)).aiMessage().text();
        log.info("text={}", text);
        return text;
    }

/*
 * ### **画面描述：**
 *
 * #### **1. 主角：帅气的猫**
 * - **外貌特征**：
 *   这只猫有着流线型的身体，肌肉感十足但不失优雅。它的毛发是黑白相间的，类似经典的奥赛罗猫（Ocelot）花纹，但在阳光下泛着金属光泽，显得格外炫酷。
 * - **表情**：
 *   它的眼神专注而自信，嘴角微微上扬，带有一丝不屑和骄傲，仿佛在说：“这场比赛我赢定了！”
 * - **服饰**：
 *   猫穿着一件宽松的红色篮球背心，上面印有数字“23”，致敬传奇球星乔丹。它还戴着一顶蓝色棒球帽，帽檐稍微倾斜，增加了一点街头风。
 *
 * #### **2. 动作设计**
 * - 猫正高高跃起，准备完成一次扣篮！
 *   - 它的前爪紧握篮球，篮球表面反射着明亮的光线，呈现出动态的旋转效果。
 *   - 后腿蹬直，尾巴向后伸展以保持平衡，整个身体形成完美的弧线。
 *   - 背景中可以看到篮筐，猫即将把球砸进篮筐，周围空气似乎因速度而被撕裂。
 *
 * #### **3. 场景设定**
 * - **地点**：
 *   一个户外篮球场，地面是经典的橙蓝配色，边缘已经有些磨损，显示这是一个经常使用的场地。
 * - **天气与光影**：
 *   夕阳西下，金色的阳光洒满球场，给整个场景增添了一种温暖又热血的氛围。猫的影子拉得很长，投射在地面上，显得更加霸气。
 * - **观众**：
 *   在球场两侧，站着几只其他动物，比如小狗、兔子和松鼠，它们都目瞪口呆地看着空中的猫，为它的精彩表现惊叹不已。
 *
 * #### **4. 细节装饰**
 * - 篮球架上挂着一条横幅，上面写着：“Cat Got Game”（猫咪有绝技），幽默又贴合主题。
 * - 地上有散落的树叶和小石子，暗示这是一个自然环境中的临时球场，而非专业场馆。
 * - 猫的耳朵里塞着无线耳机，正在听激昂的音乐，进一步强化了它的酷炫气质。
 *
 * #### **5. 风格建议**
 * - 如果是手绘，推荐使用漫画风格，线条流畅且富有动感，颜色鲜艳对比强烈。
 * - 如果是数字绘画，可以尝试赛博朋克风格，加入霓虹灯元素，让画面更具未来感。
 */
}
